﻿; (function () {
    //上传文件检测
    var checkFile = function (fileCtrl, maxSize, arrAllowFiles) {
        //是否有上传文件
        var file = fileCtrl.val();
        if (file == "") {
            return "上传文件出错：请选择要上传的文件";
        }

        //console.log(fileCtrl[0].files[0].size);
        //检测上传大小
        if (fileCtrl[0].files[0].size > maxSize) {
            return "上传文件出错：文件大小不能超过" + (maxSize / (1024 * 1024)) + "M";
        }

        var lastDotIndex = file.lastIndexOf(".");
        var type = file.substring(lastDotIndex + 1);
        //console.log(arrAllowFiles);
        var extc = '.' + type;  //.jpg
        var allowFilesFlg = false;  //是否支持格式
        for (var i = 0; i < arrAllowFiles.length; i++) {
            //console.log(arrAllowFiles[i]);
            if (extc === arrAllowFiles[i]) {
                allowFilesFlg = true;
                break;
            }
        }
        if (!allowFilesFlg) {
            return "上传文件出错：不支持 " + extc + " 格式";
        }

        return "";
    };

    $.fn.extend({
        "uploadImages": function (options) {
            var defaults = {
                url: "/WebAdmin/Uploader/UploadImage",  //设置post提交到的页面
                uploadfileName: "file",   // 提交上传控件 name
                imgUrl: "/upload/noPic.jpg",   //默认图片地址
                thumbWidth: 100,  //缩略图宽度
                btnUploadVal: "上传图片",  //上传按钮显示文字
                btnDelVal: "删除", //删除按钮显示文字
                data: null,   //额外参数 { dirName: "images" } 
                maxSize: 2 * 1024 * 1024,  // 上传大小限制，单位B，默认2MB 
                allowFiles: [".png", ".jpg", ".jpeg", ".gif", ".bmp"]    //允许上传格式
            };

            //获取默认图片地址
            var defaultImgUrl = defaults.imgUrl;

            //设置默认值
            options = $.extend(defaults, options);

            //console.log(defaults.imgUrl);
            //console.log(options.imgUrl);

            var $uploadWrap = $(this);

            //初始化文件地址
            var initfileUrl = "";

            //初始化控件
            $uploadWrap.each(function (index) {
                var $this = $(this);

                //保存上传路径控件的 name
                var idName = $this.attr("id");

                //console.log(idName + "-" + $this.attr("class") + "-" + index);

                //是否显示默认缩略图
                if (defaultImgUrl != options.imgUrl) {
                    $this.append("<div class='thumb mb-5'><img src='" + options.imgUrl + "' width='" + options.thumbWidth + "'/></div>")
                } else {
                    $this.append("<div class='thumb mb-5'></div>")
                }

                //$this.append("<div class='thumb mb-5'><img src='" + options.imgUrl + "' width='" + options.thumbWidth + "'/></div>")
                $this.append("<div class='btnGroup'><button type='button' class='btn btn-secondary radius btnUpload'><i class='Hui-iconfont'>&#xe642;</i> " + options.btnUploadVal + "</button></div>")
                       .append("<input type='text' class='fileUrl' name='" + idName + "' value='" + options.imgUrl + "'  style='display:none;' />")
                       .append("<input type='file' class='upfile' style='display:none;' />")
                       .append("<div class='progress radius mt-5' style='display:none;'></div>")
                       .append("<div class='errorMsg c-red mt-5' style='display:none;'></div>");
            });

            //绑定上传事件
            $uploadWrap.find(".btnUpload").on('click', function () {
                var $parent = $(this).parents(".uploader");
                $parent.find(".upfile").click();
            });

            //绑定删除按钮事件
            $uploadWrap.on('click', '.btnDel', function () {
                //获取父元素对象
                var $parent = $(this).parents(".uploader");

                //初始化图片地址
                $parent.find(".fileUrl").val(options.imgUrl);
                //删除缩略图
                $parent.find(".thumb").html("");


                //移除删除按钮
                $(this).remove();
            });

            //上传文件
            $uploadWrap.find(".upfile").on('change', function () {

                //获取父元素对象
                var $parent = $(this).parents(".uploader");

                //检测上传文件
                var errorMsg = checkFile($(this), options.maxSize, options.allowFiles);
                //console.log(errorMsg);
                if (errorMsg!="") {
                    $parent.find(".errorMsg").text(errorMsg).show();
                    return false;
                }

                // console.log($parent.attr("id"));
                //构建新的表单提交数据（只提交文本域）
                var from = $("<form id='formUpload' enctype='multipart/form-data'></form>");

                from.append($(this).clone().attr("name", options.uploadfileName)); //获取文件选择控件添加到新表单
                //alert($(this).val());
                from.ajaxSubmit({
                    url: options.url, /*设置post提交到的页面*/
                    type: "post", /*设置表单以post方法提交*/
                    dataType: "json", /*设置返回值类型为文本*/
                    data: options.data, /* 传递额外参数 */
                    //上传进度
                    uploadProgress: function (event, position, total, percentComplete) {
                        //console.log(percentComplete, position, total);
                        $parent.find(".progress").show().html("<div class='progress-bar'><span class='sr-only' style='width:" + percentComplete + "%'></span></div>");
                    },

                    //提交后的回调函数
                    success: function (res) {
                        //初始化进度条
                        $parent.find(".progress").hide();

                        if (res.status == "ok") {

                            //显示图片
                            $parent.find(".thumb").html("<img src='" + res.data.path + "' width='"+options.thumbWidth+"'/>");

                            //保存文件路径
                            $parent.find(".fileUrl").val(res.data.path);


                            //清空上传控件
                            $parent.find(".upfile").val('');

                            //添加删除按钮
                            if ($parent.find(".btnDel").length <= 0) {
                                $parent.find(".btnGroup").append("<button type='button' class='btn btn-danger radius btnDel ml-5'><i class='Hui-iconfont'>&#xe6e2;</i> " + options.btnDelVal + "</button>");
                            }

                            //删除错误提示
                            $parent.find(".errorMsg").text("").hide();
                        }
                        else if (res.status == "error") {
                            //alert(res.ErrorMsg);
                            //错误提示
                            $parent.find(".errorMsg").text("上传文件出错："+res.errorMsg).show();
                        }
                    },
                    error: function (error) {
                        //alert(error);
                        //错误提示
                        $parent.find(".errorMsg").text("上传文件出错：" + error).show();
                    }
                });
            });
        },
        "uploadFiles": function (options) {
            var defaults ={
                url: "/WebAdmin/Uploader/UploadFile",  //设置post提交到的页面
                uploadfileName: "file",   // 提交上传控件 name
                btnUploadVal: "上传文件",  //上传按钮显示文字
                btnDelVal: "删除", //删除按钮显示文字
                defaultUrl: "",    //默认地址
                data: null,   //额外参数 { dirName: "files" } 
                maxSize: 50 * 1024 * 1024, //上传大小限制，单位B，默认50MB 
                allowFiles: [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
                ]     //允许上传格式
            };

            //设置默认值
            options = $.extend(defaults, options);

            var $uploadWrap = $(this);


            //初始化控件
            $uploadWrap.each(function (index) {
                var $this = $(this);

                //保存上传路径控件的 name
                var idName = $this.attr("id");

                //console.log(idName + "-" + $this.attr("class") + "-" + index);

                $(this).append("<input type='text' class='input-text mb-5 fileUrl' name='" + idName + "' value='" + options.defaultUrl + "' readonly='readonly' style='width:100%;' />")
                       .append("<div class='btnGroup'><button type='button' class='btn btn-secondary radius btnUpload'><i class='Hui-iconfont'>&#xe642;</i> " + options.btnUploadVal + "</button></div>")
                       .append("<input type='file' class='upfile' style='display:none;' />")
                       .append("<div class='progress radius mt-5' style='display:none;'></div>")
                       .append("<div class='errorMsg c-red mt-5' style='display:none;'></div>");
            });

            //绑定上传事件
            $uploadWrap.find(".btnUpload").on('click', function () {
                $(this).parents(".uploader").find(".upfile").click();
            });

            //绑定删除按钮事件
            $uploadWrap.on('click', '.btnDel', function () {
                //获取父元素对象
                var $parent = $(this).parents(".uploader");

                //初始化图片地址
                $parent.find(".fileUrl").val("");

                //移除删除按钮
                $(this).remove();
            });

            //上传文件
            $uploadWrap.find(".upfile").on('change', function () {
                //获取父元素对象
                var $parent = $(this).parents(".uploader");


                //检测上传文件
                var errorMsg = checkFile($(this), options.maxSize, options.allowFiles);
                //console.log(errorMsg);
                if (errorMsg != "") {
                    $parent.find(".errorMsg").text(errorMsg).show();
                    return false;
                }

                // console.log($parent.attr("id"));
                //构建新的表单提交数据（只提交文本域）
                var from = $("<form id='formUpload' enctype='multipart/form-data'></form>");

                from.append($(this).clone().attr("name", options.uploadfileName)); //获取文件选择控件添加到新表单
                //alert($(this).val());
                from.ajaxSubmit({
                    url: options.url, /*设置post提交到的页面*/
                    type: "post", /*设置表单以post方法提交*/
                    dataType: "json", /*设置返回值类型为文本*/
                    data: options.data, /* 传递额外参数 */
                    //上传进度
                    uploadProgress: function (event, position, total, percentComplete) {
                        //console.log(percentComplete, position, total);
                        $parent.find(".progress").show().html("<div class='progress-bar'><span class='sr-only' style='width:" + percentComplete + "%'></span></div>");
                    },

                    //提交后的回调函数
                    success: function (res) {
                        //初始化进度条
                        $parent.find(".progress").hide();

                        if (res.status == "ok") {

                            //保存文件路径
                            $parent.find(".fileUrl").val(res.data.path);

                            //清空上传控件
                            $parent.find(".upfile").val('');

                            //添加删除按钮
                            if ($parent.find(".btnDel").length <= 0) {
                                $parent.find(".btnGroup").append("<button type='button' class='btn btn-danger radius btnDel ml-5'><i class='Hui-iconfont'>&#xe6e2;</i> " + options.btnDelVal + "</button>");
                            }

                            //删除错误提示
                            $parent.find(".errorMsg").text("").hide();
                        }
                        else if (res.status == "error") {
                            //alert(res.ErrorMsg);
                            //错误提示
                            $parent.find(".errorMsg").text("上传文件出错：" + res.errorMsg).show();
                        }
                    },
                    error: function (error) {
                        //alert(error);
                        //错误提示
                        $parent.find(".errorMsg").text("上传文件出错：" + error).show();
                    }
                });
            });
        }
    });
})(jQuery);